SOFTVIEWS   by David Morganstein    August 1983 Washington Apple Pi

SPEED/ASM (Randy Hyde),
A package of ready-to-use machine language subroutines for the 6502 programmer.

The package consists of two binary files (one containing floating point routines
and a shorter one without them), a LISA assembler file with the necessary equates
identifying the subroutines, a utility for relocating the SPEED/ASM routines,
several LISA compatible test programs and a brief 40 page 5"x7" manual,

If you are beginning to learn machtne language programming, you may have realized that
your task is made easier on the Apple by virtue of the volumes of documentation available
on already written routines, You can use existing entry points in the ROM monitor,
Applesoft ROMs and the DOS to take advantage of subroutines already written and tested,

With some study, you can write programs which contain a large number of JSRs (Jump to SubRoutines)
to routines which someone else has already prepared, SA extends this idea further by
providing several dozen additional subroutines which are helpful in the development of 6502 programs,

The following list describes many of these routines:

   output or read a character from the current device;
   read or write a line of text;
   for/next loops;
   If/then tests;
   move the value of an Integer variable to another Integer;
   copy a string from one variable to another;
   read an Integer; 
   onxgoto;
   single byte CASE statement;
   test for membership In a set;
   multiply and divide two-byte Integer variables;
   determine If a string can be found In another;
   compute the length of a string,

The floating point routines contain the following options:

   read or print an FP number;
   add, subtract, multiply or divide two FP numbers;
   convert an FP number to a binary Integer.

The floating point routines use a one-byte exponent and a seven byte mantissa
to give 15 digit precision (during calculation an additional mantissa byte is used to insure accuracy).

The use of pre-programmed routines may carry with it a price tag in terms of run-time speed,
To make the package versatile and relocatable, the author readily admits that the use of
SA will cause some reduction in speed over straight 6502 code.

However, you can expect your programs to run perhaps five to ten times faster than BASIC,

You certainiy will be able to develop your programs more quickly by taking advantage of
the SA routines and not reinventing the wheel,

However, let me alert the potential buyer to several of my concerns about the package,

First, the cover of SA indicates that it is not necessary to own the "LISA" assembler
in order to operate it. I disagree, of the two files required to use the package,
one, the “equates” file, is written in a LISA format and cannot be read by BIG MAC,
Tool Kit or the S-C Assembler,

The manual does not contain a listing of these equates to permit the owner of another
assembler to type in the 60 or so lines,

The equates file contains the connection between the SA labels which you include in your
assembly language program and the actual addresses of the routines,

Without them, SA is useless, On-line Systems, the distributor, would serve its potential
customers well by adding to the disk a standard text file containing these equates
or at least listing them in the manual,

Another problem for the non-LISA owner,

Randy uses a system of passing data to subroutines by following the JSR with the data,
reading the return, and jumping over the data on return from the subroutine.

This is accomplished neatly with the ADR pseudo-op in LISA.

The definition of ADR is alluded to on page 16 but novices to assemblers may have
difficulty figuring out what pseudo-op to use with their assembler,

A few words about the manual,    It is brief...

There is no table of contents or index.
The various routines are described and examples of their implementation are given,
The routines are summarized at the end of the manual,
They appear In the summary grouped in a more or less functional order.

The manual contains the following rather cryptic description of the use of the IF operation,
comparing it to a Pascal version:

IF (I=5) THEN BEGIN JSR IFIO
                    ADR I,EQ,5
    I=0; BFL INE5
    K=J; JSR LOAD
                    ADR O,I
END; JSR MOVE
                    ADR J,K
                INEJ:
                
My Translation:

    Pascal Version                 S/A Version
    ==============                 ===========
IF (I=5)  THEN BEGIN                 JSR IFIO
    I=O;                             BFL INE5
    K=J;                             JSR LOAD
                                     ADR O,I
   END:                              JSR MOVE
                                     ADR J,K
                                INE5
                   
While I found S/A to be a useful tool for the beginning 6502 programmer,
I think more attention is needed to the manual.

A small point: while the manual is labeled as DOS 3,2 or 3,3,

It is really 3,2 only!
I returned one copy first because I thought it was defective.

When the second copy did not boot either, I trotted out the old BASICS disk and was able
to get going.

On-Line Systems, 36575 Mudge Ranch Rd, Coarsefold, CA,
93614, Phone (209) 683-6858, $39.95.
